﻿using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using MemoryDuosControl;

namespace MemoryDuosInterfaz
{
    public partial class Registro : Form
    {

        private bool Editar { get; set; }
        public Registro()
        {
            InitializeComponent();
            this.AutoValidate = AutoValidate.Disable;
            this.dateTimePickerNacimiento.MaxDate = DateTime.Now;
            this.comboBox1.SelectedIndex = 0;
            Editar = false;
        }

        public Registro(String email, String nick, String nombre, String apellidos, String fechaNacimiento, String nacionalidad, String sexo)
            : this()
        {
            textBoxEmail.Text = email;
            Editar = true;
            textBoxNick.AppendText(nick);
            textBoxNombre.AppendText(nombre);
            textBoxApellidos.AppendText(apellidos);
            String[] fNacimiento = fechaNacimiento.Split('-');
            dateTimePickerNacimiento.Value = new DateTime(Convert.ToInt32(fNacimiento[0]), Convert.ToInt32(fNacimiento[1]), Convert.ToInt32(fNacimiento[2]));
            comboBox1.SelectedIndex = comboBox1.FindString(nacionalidad); ;
            this.AutoValidate = AutoValidate.Disable;
        }

        private void buttonExaminar_Click(object sender, EventArgs e)
        {
            DialogResult resultado = openFileDialogImagen.ShowDialog();

            if (resultado == DialogResult.OK)
            {
                pictureBox1.Image = Image.FromFile(openFileDialogImagen.FileName);
            }
        }

        private bool EsValidoDatosUsuario()
        {
            return false;
        }

        private bool EsValidoEmail()
        {
            try
            {
                var addr = new System.Net.Mail.MailAddress(textBoxEmail.Text);
                return true;
            }
            catch
            {
                return false;
            }
        }

        private bool ExisteEmail()
        {
            return true;
        }

        private bool EsValidoNick()
        {
            return textBoxNick.Text.Length > 6;
        }

        private bool EsValidaContraseña()
        {
            return textBoxPassword.TextLength > 7 && textBoxPassword2.TextLength > 7;
        }

        private bool SonContraseñasIguales()
        {
            return textBoxPassword.Text.Equals(textBoxPassword2.Text);
        }

        private bool EsValidoNombre()
        {
            if (System.Text.RegularExpressions.Regex.IsMatch(textBoxNombre.Text, "^[a-zA-ZáéíóúñÑÁéíóú ]*$"))
            {
                return true;
            }
            return false;
        }

        private bool EsValidoApellidos()
        {
            if (System.Text.RegularExpressions.Regex.IsMatch(textBoxApellidos.Text, "^[a-zA-ZáéíóúñÑÁéíóú ]*$"))
            {
                return true;
            }
            return false;
        }

        private void textBoxEmail_Validating(object sender, CancelEventArgs e)
        {
            if (!EsValidoEmail() || textBoxEmail.Text == "")
            {
                e.Cancel = true; errorProvider.SetError(textBoxEmail, "No has insertado un email correcto.");
            }
            else
                e.Cancel = false;
        }

        private void textBoxNick_Validating(object sender, CancelEventArgs e)
        {
            if (!EsValidoNick() || textBoxNick.Text == "")
            {
                e.Cancel = true; errorProvider.SetError(textBoxNick, "Debes insertar un nick igual o mayor a 7 carácteres.");
            }
            else
                e.Cancel = false;
        }

        private void textBoxPassword_Validating(object sender, CancelEventArgs e)
        {
            if (!EsValidaContraseña())
            {
                e.Cancel = true; errorProvider.SetError(textBoxPassword, "Las contraseñas deben ser de al menos 8 carácteres.");
            }
            else if (!SonContraseñasIguales())
            {
                e.Cancel = true; errorProvider.SetError(textBoxPassword, "Las contraseñas no son iguales;");
            }
            else e.Cancel = false;
        }

        private void textBoxNombre_Validating(object sender, CancelEventArgs e)
        {
            if (!EsValidoNombre())
            {
                e.Cancel = true; errorProvider.SetError(textBoxNombre, "El nombre no puede tener números ni símbolos.");
            }
            else e.Cancel = false;
        }

        private void textBoxApellidos_Validating(object sender, CancelEventArgs e)
        {
            if (!EsValidoApellidos())
            {
                e.Cancel = true; errorProvider.SetError(textBoxApellidos, "El apellido no puede tener números ni símbolos.");
            }
            else e.Cancel = false;
        }

        private void textBoxNick_Validated(object sender, EventArgs e)
        {
            errorProvider.SetError(textBoxNick, "");
        }

        private void textBoxEmail_Validated(object sender, EventArgs e)
        {
            errorProvider.SetError(textBoxEmail, "");
        }

        private void textBoxPassword_Validated(object sender, EventArgs e)
        {
            errorProvider.SetError(textBoxPassword, "");
        }

        private void textBoxNombre_Validated(object sender, EventArgs e)
        {
            errorProvider.SetError(textBoxNombre, "");
        }

        private void textBoxApellidos_Validated(object sender, EventArgs e)
        {
            errorProvider.SetError(textBoxApellidos, "");
        }

        private void buttonRegistrar_Click(object sender, EventArgs e)
        {
            if (this.ValidateChildren())
            {
           
                if (!Editar)
                {
                    Usuario usu = new Usuario(textBoxEmail.Text, textBoxNick.Text, textBoxPassword.Text);
                    usu.Nombre = textBoxNombre.Text;
                    usu.Apellidos = textBoxApellidos.Text;
                    usu.FechaNacimiento = dateTimePickerNacimiento.Value.ToString("yyyy-MM-dd");
                    usu.Nacionalidad = comboBox1.SelectedItem.ToString().Trim();
                    usu.Sexo = radioButton1.Checked ? "H" : "M";
                    try
                    {
                        var insertado = usu.InsertarEnBD();
                        if (insertado)
                        {
                            if (!openFileDialogImagen.FileName.Equals(""))
                                usu.SubirImagen(openFileDialogImagen.FileName);
                            this.Close();
                        }
                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show(exc.Message);
                    }
                }
                else
                {
                    Usuario usuario = Controlador.Instance.UsuarioActual;
                    usuario.Email=textBoxEmail.Text;
                    usuario.Nick=textBoxNick.Text;
                    usuario.Pass = textBoxPassword.Text;
                    usuario.CalcularHash();
                    usuario.Nombre = textBoxNombre.Text;
                    usuario.Apellidos = textBoxApellidos.Text;
                    usuario.FechaNacimiento = dateTimePickerNacimiento.Value.ToString("yyyy-MM-dd");
                    usuario.Nacionalidad = comboBox1.SelectedItem.ToString().Trim();
                    usuario.Sexo = radioButton1.Checked ? "H" : "M";
                    try
                    {
                        var insertado = usuario.InsertarDatosActualizados();
                        if (insertado)
                        {
                            if (!openFileDialogImagen.FileName.Equals(""))
                                usuario.SubirImagen(openFileDialogImagen.FileName);
                            this.Close();
                        }
                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show(exc.Message);
                    }

                }
            }
            else
            {
                //MessageBox.Show("OH NO!");
            }
        }

        private void Registro_Load(object sender, EventArgs e)
        {
        }

        private void textBoxEmail_Leave(object sender, EventArgs e)
        {
            if (!Editar)
            {
                var peticion = Usuario.VerificarEmail(textBoxEmail.Text);
                if (peticion.Estado == false)
                {
                    errorProvider.SetError(textBoxEmail, "El e-mail elegido ya existe");
                    textBoxEmail.Focus();
                }
                else
                {
                    errorProvider.SetError(textBoxEmail, "");
                }
            }
            else
            {
                if (textBoxEmail.Text.Equals(Controlador.Instance.UsuarioActual.Email))
                {
                    errorProvider.SetError(textBoxEmail, "");
                }
                else
                {
                    var peticion = Usuario.VerificarEmail(textBoxEmail.Text);
                    if (peticion.Estado == false)
                    {
                        errorProvider.SetError(textBoxEmail, "El e-mail elegido ya existe");
                        textBoxEmail.Focus();
                    }
                    else
                    {
                        errorProvider.SetError(textBoxEmail, "");
                    }
                }
            }
        }

        private void Registro_Load_1(object sender, EventArgs e)
        {
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
        }
    }
}